(* module ColorParser : permet de détecter les différentes couleurs de l'image *)
(* et de demander à l'utilisateur la hauteur correspondante *)

let button_ok = ref false

(* Verifie si une couleur est deja dans la liste *)
let rec exist triple list = match list with
    [] -> false
  | e::l -> match e with
      e when e.Types.color = triple -> true;
      | _ -> exist triple l	

(* Creation de la liste de couleur en parcourant l'image *)
let detection_of_color image list =
  let w, h = (Array.length image, Array.length image.(0)) in
  let black = 0 in
  for y = 0 to (h - 1) do
    for x = 0 to (w - 1) do
      if not (image.(x).(y) = black) && not (exist (image.(x).(y)) (!list)) then
        list := {Types.color = (image.(x).(y)); Types.height = 0}::!list;
    done;
  done

(* Fonction test pour le tri de la liste *)
let sort_test x y =
  if x.Types.height <= y.Types.height then
    0
  else
    1

(* Demande des hauteurs et tri de la liste a la fin *)

let height_set list =
  for i = 0 to List.length (!list) - 1 do
    print_string ("Hauteur "^(string_of_int i)^" ?");
    (List.nth !list i).Types.height <- (int_of_string (read_line()));
  done;
  list := List.sort sort_test !list

(* Ecrit la liste dans un fichier texte *)
let write_color list = 
  let canal_in = open_out "Color.txt" in
  let rec write l = match l with 
      [] -> close_out canal_in
    | e::l -> let c = (string_of_int (e.Types.color)) in
	      let h = (string_of_int (e.Types.height)) in
	      let s = "Color = "^c^"; Height = "^h^"\n" in
	      output canal_in s 0 (String.length s);
	      write l;
  in
write !list

(* Fonction d'appel *)
let detection image =
  let list = ref[] in
  let color_count = ref 0 in
  begin
    detection_of_color image list;
    color_count := List.length !list;
    (*height_set list;
    write_color list;*)
  end;
!list


(*EOF*)
